\section{Iterazione 2}
\subsection{Introduzione}
  \begin{frame}
    \frametitle{Elabora Vendita: politiche di sconto}
      Dalla studio del dominio applicativo abbiamo estrapolato le seguenti regole di business:
    \begin{description}
      \item[Prodotti] Sconti dipendenti dalle quantità di prodotto acquistate (e.g. 3x2)
      \item[Vendita] Sconti percentuali o sul totale di vendita.
      \end{description}
   Inoltre abbiamo prestato attenzione alla validità temporale degli sconti, per una maggiore robustezza e flessibilità.
  \end{frame}
  
  \subsection{Design}
  \begin{frame}
    \frametitle{Elabora Vendita: politiche di sconto}
      Si è così fatto utilizzo dei Pattern:
      \begin{columns}
	      \column{0.3\textwidth}
    \begin{itemize}
      \item \textbf{Strategy}
      \item \textbf{Composite}
      \item\textbf{Factory} 
      \end{itemize}
      \column{0.7\textwidth}
       \begin{figure}[ht]
		\centering
		\includegraphics[scale=0.25, keepaspectratio=true]{img_matteo/ScontoProdotto.png}
      \end{figure}
      \end{columns}
  \end{frame}
  
  \begin{frame}
    \frametitle{Elabora Vendita: politiche di sconto}   
       \begin{figure}[ht]
		\centering
 		\includegraphics[width=\textwidth, keepaspectratio=true]{img_matteo/avviaNuovaVendita.png}
      \end{figure}
  \end{frame}
  
\subsection{Il problema della persistenza}
  \begin{frame}
    \frametitle{Il problema della persistenza degli oggetti}
    ORM vs. OODBMS 
    \begin{itemize}
      \item Entrambi risolvono (in maniere differenti) il problema del disadattamento fra modello relazionale e quello ad oggetti
      \item Entrambi propongo soluzioni per essere indipendenti dal tipo di RDBMS adottato.
    \end{itemize}
  \end{frame}
  
  \subsection{Overview sui OODBMS}
   \begin{frame}
    \frametitle{Il problema della persistenza degli oggetti}
       Gli OODBMS fra le altre cose, consentono inoltre di: 
       \begin{columns}
	      \column{0.5\textwidth}
	       \begin{itemize}
		  \item<1-> Replicare fedelmente il modello delle classi all'interno del modello dei dati
		  \item<2-> Lasciare al sistema l'onere di identificare gli oggetti attraverso gli OID's
		  \item<3-> Utilizzare la \textit{Transparent Persistance} e la \textit{Transparent Activation}. 
		\end{itemize}
		
	      \column{0.5\textwidth}
	     \begin{figure}[ht]
		\centering
		\includegraphics<3>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-3.jpeg}     
 		\includegraphics<4>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-16.jpeg}
 		\includegraphics<5>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-24.jpeg}
 		\includegraphics<6>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-26.jpeg}
 		\includegraphics<7>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-48.jpeg}
 		\includegraphics<8>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-49.jpeg}
 		\includegraphics<9>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-50.jpeg}
 		\includegraphics<10>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-51.jpeg}
 		\includegraphics<11>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-57.jpeg}
 		\includegraphics<12>[scale=0.25, keepaspectratio=true]{img_matteo/tmp-64.jpeg}
		\end{figure}
	      \end{columns}
  \end{frame}
  
 \subsection{db4o}
  \begin{frame}
    \frametitle{La scelta di db4o}
    Database a oggetti prodotto da Versant:
    \begin{figure}
	\includegraphics[scale=0.2]{img_matteo/db4o.png}
    \end{figure}
    \begin{itemize}
      \item db4o è un database ad oggetti open source progettato per funzionare su piattaforme Java o .NET
      \item Perchè è stato scelto:
      \begin{itemize}
      \item Interesse didattico (viste anche le precedenti esperienze con gli ORM)
      \item Aspetti funzionali interessanti riguardo manutenibilità e prestazioni.
    \end{itemize}
    \end{itemize}
  \end{frame}
  
  \subsection{Gestione della persistenza con db4o}
  \begin{frame}
    \frametitle{Il design dello strato foundation}
    \begin{figure}
	\includegraphics[scale=0.5]{img_matteo/rdbms_db4o.png}
    \end{figure}
    Da quanto detto e dall'immagine si intuisce che uno strato foundation con db4o (se ben progettato!) aiuta a sviluppare software:
    \begin{itemize}
      \item Ad elevate prestazioni
      \item Flessibile.
    \end{itemize}
  \end{frame}
  
    \begin{frame}
    \frametitle{Il design dello strato foundation}
    \begin{figure}
	\includegraphics[width=\textwidth]{img_matteo/tech.png}
    \end{figure}
    \end{frame}
    
  \begin{frame}
    \frametitle{Il problema dell'accesso concorrente}
    Vista l'architettura distribuita del sistema e la presenza di più terminali:
    \begin{itemize}
      \item si è addottato il modello client-server (offerto da db4o) per gestire gli accessi al db 
    \end{itemize}
     Il problema emerso è l'isolamento fra i vari client:
    \begin{itemize}
      \item per motivi di caching interno a db4o si possono avere più istanze (differenti) dello stesso oggetto e quindi incoerenze
    \end{itemize}
  \end{frame}
  
  \begin{frame}
    \frametitle{Una soluzione al problema dell'accesso}
    Una prima soluzione al problema è stata quella di definire un manager delle connessioni al server per l'accesso al db:
    \begin{itemize}
      \item che avesse il compito di fornire ai client interessati i servizi di persistenza
      \item e che fosse in grado di risolvere il problema dell'isolamento indentificando i vari client attraverso il proprio thread di esecuzione
    \end{itemize}
  \end{frame}
  
  \section{Iterazione 3}
  \subsection{Pianificazione}
  \begin{frame}
    \frametitle{Gestisci Inventario \& Prenota Prodotto}
    Nella terza iterazione sono stati affrontati i casi d'uso Gestisci Inventario e Prenota Prodotto. Sono stati trattati insieme perchè:
    \begin{itemize}
      \item sia il cliente (Prenota Prodotto) o l'impiegato (Gestisci Inventario e Prenota Prodotto) avevano la necessità di gestire le medesime informazioni
      \item Valore di copertura e di rischo legato a valori di business (Prenota Prodotto) elevati nel complesso .
     \end{itemize}
  \end{frame}
  \subsection{Analisi}
  \begin{frame}
    \frametitle{Feedback al modello di dominio}
    A seguito della pianificazione dell'iterazione è stato modificato il modello di dominio:
    \begin{columns}
     \column{0.5\textwidth}
    \begin{itemize}
      \item aggiungendo la classe concettuale Prenotazione
      \item aggiungendo un attributo quantitàDisponibile valido per entrambi i casi d'uso in esame.
    \end{itemize}
   
    \column{0.5\textwidth}
     \begin{figure}
     \centering
	\includegraphics[scale=0.25]{img_matteo/feed_mod.png}
    \end{figure}
    \end{columns}
  \end{frame}
  
  \begin{frame}
    \frametitle{Il flusso dei prodotti e la gestione delle quantit\`a}
    Il flusso dei prodotti nei casi d'uso in esame è così composto:
    \begin{enumerate}
     \item quando non sono disponibili unità del prodotto in negozio 
     \item il prodotto è reso disponibile per la prenotazione lato cliente
     \item le quantità disponibili possono essere modificate in fase di inventario per permettere successivamente al commesso di completare la prenotazione .
    \end{enumerate}
  \end{frame}
  \subsection{Design}
  \begin{frame}
    \frametitle{La gerarchia di transazioni}
    Date le similitudini e la complementarità fra la prenotazione e vendita la gerarchia individuata è le seguente
    \begin{figure}
     \centering
	\includegraphics[scale=0.25]{img_matteo/Transazioni.jpg}
    \end{figure}
  \end{frame}
  \subsection{Proxies}
  \begin{frame}
    \frametitle{Design Pattern: Proxy}
      Nella gerarchia e in altre parti del progetto si è fatto riscorso al Pattern Proxy in due sue varianti:
    \begin{itemize}
      \item Remote Proxy: Rendere invocabili da remoto i metodi della gerarchia di Transazioni tramite RMI
      \item Smart Proxy: Utilizzo della Trasparent Activation e la Transparent Persistance
    \end{itemize}
  \end{frame}
  
   \begin{frame}
    \frametitle{Proxy Remoto \& Smart Proxy}
    Benefici:
    \begin{itemize}
      \item Basso accoppiamento e Alta Coesione
      \item Mantenere pulito lo strato di dominio
      \item Indirezione, variazioni protette quindi aumento delle possibilità di riuso.
    \end{itemize}
   
  \end{frame}
  